<?php

class Methods
{	

	public function Methods()
	{
		include("Methods.methodTable.php"); 
	}	
	
	/**(versao 2 do Funções Quadráticas)
	/*Cadastra um usuario
	*
	*@access remote
	*@param string nome,login,senha,sexo,email,escola,tipo
	*@return int
	*/
	public function gravaUsuario($nome,$login,$senha,$sexo,$email,$escola,$tipo){
	
		session_start();

		include('../../banco.inc');
		
		//pesquisar se o login já existe
		$l = mysql_query("select * from usuario where login ='".$login."'");
		
		//se não tiver nenhum login igual ao fornecido, cadastrda
		if (!mysql_num_rows($l)>0){
					
			$result=mysql_query("insert into usuario(nome,login,senha,sexo,email,escola,tipo)            values('$nome','$login','$senha','$sexo','$email','$escola','$tipo')");
			
			$IdOnLogin = mysql_query("select id from usuario where login='$login'");
			$id = mysql_result($IdOnLogin,0,0);
			
			$_SESSION['logado'] = true;
			$_SESSION['tipo'] = $tipo;
			$_SESSION['id'] = $id;
		
			$erro = 0;
			
			if(!$result){
				//Não conseguiu inserir os dados					
				$erro = 2;
			}
			
		}
		else{
			//erro, login existente
			$erro = 1;
		}			
		mysql_close($conect);
		return $erro;		
	}
	
	/** DEPRECIADO
	* Busca todos os roteiros  pelo nome do professor
	*
	* @access remote
	* @param nome do professor(opcional)
	* @return array
	*/ 
   public function buscaRoteiros($param){
   
	include('../../banco.inc');
				
        $sql = "SELECT usuario.nome, usuario.escola, roteiro.id, roteiro.titulo FROM `usuario` join roteiro on usuario.roteiro = roteiro.id WHERE usuario.tipo='p' AND usuario.nome LIKE '".$param."%'";
            $resultado = mysql_query($sql);
            
		while ($linha = mysql_fetch_object($resultado)) {
            $ArrayRetorno[]=$linha;
        }
        //
        mysql_free_result($resultado);
	    //mysql_close($conect);
        return $ArrayRetorno;
   }
   
   	/** (versao 2 do Funções Quadráticas)
	* Busca todos os roteiros de um usuário do tipo Professor (p)
	*
	* @access remote
	* @param string discriminadorAmbiente, descreve de qual ambiente vem a requisição e devolve somente roteiros deste contexto
	* @return array
	*/ 
    public function listaRoteirosProfessor($discriminadorAmbiente){
    	
		session_start();
	
		include('../../banco.inc');
		
		//armazena o id do professor que está listando seus roteiros
		$idProfessor = $_SESSION['id'];
        
        $resultado = mysql_query("SELECT id,titulo FROM roteiro WHERE professor = $idProfessor and discriminador_contexto = '$discriminadorAmbiente'");
        
		$ArrayRetorno[] = null;
		while ($linha = mysql_fetch_object($resultado)) {
               $ArrayRetorno[] = $linha;
        }
        
        mysql_free_result($resultado);
		
		mysql_close($conect);
		
		return $ArrayRetorno;
   }	
	
	/** (versao 2 do Funções Quadráticas)
	* Grava o roteiro do professor
	*
	* @access remote
	* @param string titulo do roteiro
	* @param string conteudo do roteiro
	* @param string discriminadorAmbiente
	* @return boolean
	*/
	public function gravaRoteiro($titulo,$conteudo,$idRoteiro,$discriminadorAmbiente){
		
		session_start();
		
		include('../../banco.inc');
		
		//pega o id do professor para ser usado no momento do inserção
    	$id = $_SESSION['id'];     	
	  		
		//Testa se o parâmetro $idRoteiro é diferente de null, se for update
		if ($idRoteiro != null){
			$result = mysql_query("update roteiro set titulo = '$titulo', conteudo = '$conteudo', discriminador_contexto = '$discriminadorAmbiente' where id = ".$idRoteiro);		
		}
		// se não tiver cadastra
		else{
			
			$result = mysql_query("insert into roteiro(titulo,conteudo,professor,discriminador_contexto) values ('$titulo','$conteudo','$id','$discriminadorAmbiente')");		   
	   }
	   
	   mysql_close($conect);
				
     	if ($result) { 	 
       		return true;
     	}	 	
	 	return false;
	}
	
	/** (versao 2 do Funções Quadráticas)
	* Grava o Id do Professor selecionado pelo aluno
	*
	* @access remote
	* @param int Id do roteiro
	* @return boolean
	*/
	public function idSelectRoteiro($idProfessor){
	
		session_start();
		
		include('../../banco.inc');
    	
		if($_SESSION['id']!=null){
			$idUsuario = $_SESSION['id'];
										
			$result = mysql_query("UPDATE usuario SET professor = $idProfessor WHERE id = $idUsuario");
		}
		
		mysql_close($conect);
		
		if (!$result){
			return false;
		}
		else
			return true;
	
	}

	/**(versao 2 do Funções Quadráticas)
	* Le o primeiro roteiro do professor
	*
	* @access remote
	* @param discriminadorAmbiente
	* @return string
	*/
	public function leRoteiro($discriminadorAmbiente){
		
		session_start();
	
		include('../../banco.inc');
		
		//armazerá o id autor dos roteiros utilizados pelo usuario em questão
		$autorRoteiro = null;
		
    	//Armazenando o idUsuario que está na sessão. Caso seja nulo, usuário é convidado e idUsuario recebe valor 1.
		if ($_SESSION['id'] != null){
			$id = $_SESSION['id'];	
			//carregando professor do aluno
			$result = mysql_query("SELECT tipo,professor FROM usuario WHERE id = $id");
		
			if(mysql_result($result,0,0) == 'a' || mysql_result($result,0,0) == 'A'){
				//se for aluno, armazene o id do seu professor (autor dos roteiros que tal aluno utiliza)
				$autorRoteiro = mysql_result($result,0,1);				
			}
			//testa se o usuário professor ou se o aluno não se relaciona com professor (o aluno, durante o cadastro, pode ter burlado esta etapa)
			if($autorRoteiro == null)
				$autorRoteiro = 1;
		}	
		else{
			$autorRoteiro = 1;
		}
    			
		//carregando roteiro do usuario, usuario seja convidado o roteiro será o padrão
        $result = mysql_query("SELECT * FROM roteiro WHERE professor = $autorRoteiro and discriminador_contexto = '$discriminadorAmbiente'");//

		//$texto armazenara o resultado da busca por roteiro
		$texto = '';

		//Testa se o professor do aluno cadastro algum roteiro
		if (mysql_num_rows($result) > 0){		
			$texto = mysql_result($result,0 ,2);
		}
		else{
			//se não cadastrou, devolver o PRIMEIRO roteiro padrão
			$result = mysql_query("SELECT * FROM roteiro WHERE professor = 1 and discriminador_contexto = '$discriminadorAmbiente'");	
		
		}		
	
		
		mysql_close($conect);
     	
		//texto só deverá retornar '' (vazio) se o usuário padrão com os seus roteiros não estivereem cadastrados			
      	return $texto;
						 
	}
	
	
	/**(versao 2 do Funções Quadráticas)
	* Le o roteiro por ID do professor
	*
	* @access remote
	* @param int idRoteiro
	* @param string discriminadorAmbiente
	* @return string
	*/
	public function leRoteiroById($idRoteiro,$discriminadorAmbiente){

		include("../../banco.inc");
		
		$result = mysql_query("SELECT conteudo FROM roteiro WHERE id = $idRoteiro and discriminador_contexto = '$discriminadorAmbiente'");
		
		$texto = '';
		if (mysql_num_rows($result) > 0){
			$texto = mysql_result($result,0,0);
		}
		
		return $texto;
		
	}
	
	/** 
	* Editar o tírulo do roteiro do professor
	*
	* @access remote
	* @param string titulo do roteiro
	* @return string
	*/
	public function _EdtTituloRoteiro($paramOb)	{
		session_start();
	
		include('../../banco.inc');
		$titulo = '';
		
    	if ($_SESSION['id'] != null){
			$id = $_SESSION['id']; 
			
			//pegar o roteiro pelo usuário, pois caso seja aluno garante o título
			$roteiro = mysql_query("select roteiro from usuario where id =".$id);
			
			//testa se o usuario tem um roteiro específico
			if (mysql_num_rows($roteiro)>1){
				$idRoteiro = mysql_result($roteiro,0,0);
			}
			//se não tiver roteiro, título e questões padrão
			else
				$idRoteiro = 1;			
		}
		//se não tiver id na sessão trata-se do usuário convidado
		else
			$idRoteiro = 1;
			   	
        $result = mysql_query("select * from roteiro where id=".$idRoteiro);
			
		
		if (mysql_num_rows($result)>0)
			$titulo = mysql_result($result,0 ,1);
			
		mysql_close($conect);
     	//se nenhum registro for encontrado o retorno é vazio		      	 	
		
		return $titulo;			
	}
	
	/** (versao 2 do Funções Quadráticas)
	* Listar os tírulos dos roteiros do professor do usuario do funcao(obj principal)
	*
	* @access remote
	* @param string discriminadorAmbiente
	* @return string
	*/
	public function listTitulosRoteirosUser($discriminadorAmbiente){
		session_start();
	
		include('../../banco.inc');
		
		//armazerá o id autor dos roteiros utilizados pelo usuario em questão
		$autorRoteiro = null;
		
    	//Armazenando o idUsuario que está na sessão. Caso seja nulo, usuário é convidado e idUsuario recebe valor 1.
		if ($_SESSION['id'] != null){
			$id = $_SESSION['id'];	
			//carregando professor do aluno
			$result = mysql_query("SELECT tipo,professor FROM usuario WHERE id = $id");
		
			if(mysql_result($result,0,0) == 'a' || mysql_result($result,0,0) == 'A'){
				//se for aluno, armazene o id do seu professor (autor dos roteiros que tal aluno utiliza)
				$autorRoteiro = mysql_result($result,0,1);				
			}
			//testa se o usuário professor ou se o aluno não se relaciona com professor (o aluno, durante o cadastro, pode ter burlado esta etapa)
			if($autorRoteiro == null)
				$autorRoteiro = 1;
		}	
		else{
			$autorRoteiro = 1;
		}
		
		//selecionar os roteiros do autor armazenado
		$result = mysql_query("SELECT titulo,id FROM roteiro WHERE professor = $autorRoteiro and discriminador_contexto = '$discriminadorAmbiente'");//

		//Testa se o professor do aluno tem algum roteiro cadastrado (o professor pode ter excluído seus roteiros)
		if (! mysql_num_rows($result) > 0){		
		
			//se não cadastrou, devolver o PRIMEIRO roteiro padrão
			$result = mysql_query("SELECT titulo,id FROM roteiro PROFESSOR = 1 and discriminador_contexto = '$discriminadorAmbiente'");	
		
		}		
		
		//armazena a lista de titulos dos roteiros utilizados pelo usuário logado
		$listaTitulo[] = null;
		
		while($linha = mysql_fetch_object($result)){
			$roteiro[] = $linha;
		}	
		
		mysql_free_result($result);
		
		mysql_close($conect);
		
		//só irá retornar nulo se o professor padrão e seus roteiros não estiverem cadastrados
		return $roteiro;
		
	}
	
	/** (versao 2 do Funções Quadráticas)
	* Le o Roteiro do professor para edição
	*
	* @access remote
	* @param int com o id do roteiro
	* @return array
	*/
	public function EdtRoteiro($idRoteiro){
		
		include('../../banco.inc');
		$roteiro[] = null;
		
    	if ($idRoteiro != null){
			  	
        	$result = mysql_query("SELECT titulo,conteudo FROM roteiro WHERE id=".$idRoteiro);
			
			while($linha = mysql_fetch_object($result)){
				$roteiro[] = $linha;
			}		
			mysql_free_result($result);
			mysql_close($conect);
     		//se nenhum registro for encontrado o retorno é vazio		
      	 	
		}
		return $roteiro;			
	}
	
		
	/** (versao 2 do Funções Quadráticas)
	* Ecluir Roteiro
	*
	* @access remote
	* @param string id do roteiro
	* @return boolean
	*/
	public function exluirRoteiro($idRoteiro){
		
		include ("../../banco.inc");
		
		$result = mysql_query("DELETE FROM roteiro WHERE id =".$idRoteiro);
	
		$retorno = true;	
		
		if (!$result)
			$retorno = false;
			
		mysql_close($conect);	
		
		return $retorno;
	}
	
	
	/** (versao 2 do Funções Quadráticas)
	* Lista de Titulos dos roteiros de um Professor
	*
	* @access remote
	* @param string discriminadorAmbiente
	* @return array
	*/
	public function ListTituloRoteiroByProfessor($discriminadorAmbiente){
		
		session_start();
		
		include("../../banco.inc");
		
		$idProfessor = $_SESSION['id'];
		
		$result = mysql_query("SELECT titulo, id FROM roteiro WHERE professor = $idProfessor and discriminador_contexto = '$discriminadorAmbiente'");
		
		$ArrayTitulos[] = null;
		
		while ($linha = mysql_fetch_object($result)){
			$ArrayTitulos[] = $linha;
		}
		
		mysql_free_result($result);
		mysql_close($conect);
		
		return $ArrayTitulos;
		
	}	
	
	
	/** (versao 2 do Funções Quadráticas)
	* Lista de Professores que cadastraram roteiro
	*
	* @access remote
	* @param string tipo do filtro
	* @param string valor do filtro
	* @param string discriminadorAmbiente
	* @return array
	*/
	public function listProfessorRoteiro($tipoFiltro, $valFiltro,$discriminadorAmbiente){
			
		include('../../banco.inc');// or die("Erro ao tentar incluir arquivo do banco de dados");
		
		//array que vai armazenar a lista de professores que têm roteiro(s) cadastrado(s)
		$listaProfessores[] = null;
		
		//Seleciona os ids dos autores dos roteiros cadastrados
		$result = mysql_query("SELECT professor FROM roteiro");
					
		//Conta as linhas encontrados em $result para realizar o for
		$numLinhas = mysql_num_rows($result);
		//armazena o primeiro id da lista encontrada. A condição if é para garantir que não seja lançada uma excessão caso não exista nenhum roteiro cadastrado
		if ($numLinhas > 0) 
			$idProfessores = mysql_result($result,0,0);
		//armazena na variavel $idProfessores a listga de id's dos autores de roteiro. Servirá de auxilio na query com 'in'
		for ($i = 1; $i < mysql_num_rows; $i++){
			
			$idProfessores = $idProfessores.','.mysql_result($result,$i,0);
			
		}	
		
		$sql = "SELECT id,login,nome,escola FROM usuario WHERE id IN ($idProfessores) AND discriminador_contexto = '$discriminadorAmbiente'";
		
		//se tipo do filtro estiver vazio deve litar todas as ocorrencias
		if ($tipoFiltro != ''){
			switch ($tipoFiltro){
				
				case "Usuario" : $sql = $sql." AND login LIKE '$valFiltro%' ";
								 break;
	
				case "nome" : $sql = $sql." AND nome LIKE '$valFiltro%' ";
							  break;	
	
				case "Escola" : $sql = $sql." AND escola LIKE '$valFiltro'% ";
								break;
				
				default : break; 
			}			
		}
		
		$resultProfessores = mysql_query($sql);
		
		while ($linha = mysql_fetch_object($resultProfessores)){
			$listaProfessores[] = $linha;
		}
		mysql_free_result($resultProfessores);
		//retorna a lista de professores que têm roteiro ou null se nenhum roteiro for encontrado
		return $listaProfessores;
				
	}
	
	/** (versao 2 do Funções Quadráticas)
	* Grava o Questao do professor
	*
	* @access remote
	* @param string text da pergunta
	* @param string a
	* @param string b
	* @param string c
	* @param string d
	* @param string certa (resposta)
	* @param string idRoteiro
	* @return boolean
	*/	
	public function gravaQuestao($perg, $a, $b, $c, $d, $certa, $idRoteiro){
		
		include('../../banco.inc');
    	
		session_start();
				
		/* 
		 * Se $_$Session['id'] for nulo $result não efetuará o cadastro. 
		 * Assim, todas os cadastros seguintes tb não serão realizados, retornando false no fim da execuçao do método
		*/
		   	
        //gravar Pergunta passando o id do usuário que necessariamente é um professor, já que essa opção só existe no menu de prof.
		$result = mysql_query("insert into perguntas(pergunta,certa,roteiro) values('$perg','$certa','$idRoteiro')");
		
		//Esse modo de pegar o último id de perguntas pode ser falho por causa do acesso concorrente
		$ultquest = mysql_query ("select max(id) from perguntas");
		
		$idquest = mysql_result($ultquest,0,0);		

		//Gravar possíveis Respostas
		$resultA = mysql_query("insert into respostas(resposta,pergunta) values('$a', '$idquest')");
		$resultB = mysql_query("insert into respostas(resposta,pergunta) values('$b', '$idquest')"); 
		$resultC = mysql_query("insert into respostas(resposta,pergunta) values('$c', '$idquest')");
		$resultD = mysql_query("insert into respostas(resposta,pergunta) values('$d', '$idquest')");		
				
		mysql_close($conect);
		
		//se algum tiver o retorno false, Erro no Cadastro	
		if ((!$result)||(!$resultA)||(!$resultB)||(!$resultC)||(!$resultD)){
           	return false;				
		}
		else 
			return true;
		
	}
	
	/** (versao 2 do Funções Quadráticas)
	* Altera uma Questao de um professor
	*
	* @access remote
	* @param string text da pergunta
	* @param string a do roteiro
	* @param string b do roteiro
	* @param string c do roteiro
	* @param string d do roteiro
	* @param string certa (resposta)
	* @param string idPergunta	
	* @return boolean
	*/	
	public function alteraQuestao($perg, $a, $b, $c, $d, $certa, $idPergunta){
		
		include('../../banco.inc');
    	
		session_start();
		   	
        //gravar Pergunta passando o id do usuário que necessariamente é um professor, já que essa opção só existe no menu de prof.
		$result = mysql_query("update perguntas set pergunta = '$perg' , certa = '$certa' where id = $idPergunta");
		
		$resultQuestoes = mysql_query("select id from respostas where pergunta = $idPergunta order by id");
				
		//Gravar possíveis Respostas
		$idResposta = mysql_result($resultQuestoes,0,0);
		$resultA = mysql_query("update respostas set resposta = '$a', pergunta = '$idPergunta' where id = $idResposta");
		$idResposta = mysql_result($resultQuestoes,1,0);
		$resultB = mysql_query("update respostas set resposta = '$b', pergunta = '$idPergunta' where id = $idResposta");
		$idResposta = mysql_result($resultQuestoes,2,0);
		$resultC = mysql_query("update respostas set resposta = '$c', pergunta = '$idPergunta' where id = $idResposta");
		$idResposta = mysql_result($resultQuestoes,3,0);
		$resultD = mysql_query("update respostas set resposta = '$d', pergunta = '$idPergunta' where id = $idResposta");		
				
		mysql_close($conect);
		
		//se algum tiver o retorno false, Erro no Cadastro	
		if ((!$result)||(!$resultA)||(!$resultB)||(!$resultC)||(!$resultD)){
           	return false;				
		}
		else return true;
		
	}
	
	/**
	* Busca pergunta
	*
	* @param int numQuestao numero da questão
	* @param int idRoteiro
	* @access remote 
	* @return array
	*/
	public function buscaPerguntas($idRoteiro, $numQuestao){
		
		include('../../banco.inc');
    	session_start();
		
		$ArrayPerg[] = null;
		
		//Testa se não existe nenhuma lista de perguntas na sessão
		if ($_SESSION['questoes'] == null){		
			//Busca Perguntas que se relacionam com o autor do roteiro usado pelo usuario	
			$result = mysql_query("SELECT id,pergunta,certa FROM perguntas WHERE roteiro = $idRoteiro order by id");
			$_SESSION['questoes'] = $result;			
			$_SESSION['qtdePerguntas'] = mysql_num_rows($result);
		}
	    
		//Se o número da questão($numQuestao) for menor que a quantidade de perguntas, retorna a pergunta+respostas+opcao correta
		if ( ( $numQuestao < $_SESSION['qtdePerguntas']) && ($_SESSION['qtdePerguntas'] > 0) ){
			
			//armazenando a pergunta no Array de retorno
			$ArrayPerg[0] = mysql_result($_SESSION['questoes'],$numQuestao,1);
			//armazenando a opçao correta no Array de retorno
			$ArrayPerg[5] = mysql_result($_SESSION['questoes'],$numQuestao,2);						
			//armazenando o id da pergunta corrente
			$idPerg = mysql_result($_SESSION['questoes'],$numQuestao,0);			
			//procura as opções de resposta da pergunta
			$resp = mysql_query("select resposta from respostas where pergunta = $idPerg");			
			
			//$numOpcoes deverá ser sempre igual a 4, pois são sempre gravadas quatro repostas para cada pergunta
			$numOpcoes = mysql_num_rows($resp);
			$i=0;
			while ($i<$numOpcoes){
				// a posicao 0 do Array, $ArrayPerg[0], contém a pergunta e a 5 a opção correta, de 1 a 4 conterá as opções
				$ArrayPerg[$i+1] = mysql_result($resp,$i,0);
				$i++;
			}
			//Retorna um valor >=0 indicando que não é o fim das questões			
			$ArrayPerg[6] = 0;
		}
		//Fim das questões, retorno negativo
		else{
			$ArrayPerg[6]=-1;
		}
						
		return $ArrayPerg;
		
	}
	
	
	/** (versao 2 do Funções Quadráticas)
	* Busca uma pergunta pelo id
	*
	* @access remote
	* @return array
	*				A Estrutura do ArrayRetornado é a seguinte 
							[0] pergunta
							[1] opcao a
							[2] opcao b
							[3] opcao c
							[4] opcao d
							[5] opcao correta (um char contendo 'a' ou 'b' ou 'c'ou 'd')
							[6] idRoteiro
																				
	*/
	public function buscarPerguntaById($idPergunta){
				
		include("../../banco.inc");
		session_start();
		
		$result = mysql_query("SELECT resposta FROM respostas WHERE pergunta = $idPergunta");
		
		$respostas[] = null;
		
		$numLinhas = mysql_num_rows($result);
		
		for ($i =0; $i < $numLinhas; $i++){
			$respostas[$i] = mysql_result($result, $i, 0);
		}	
		
		mysql_close($conect);
		
		return $respostas;
		
	}
	
	
	/** (versao 2 do Funções Quadráticas)
	* Listar todas as perguntas por roteiro
	*
	* @access remote
	* @param string discriminadorAmbiente
	* @return array (contendo idPergunta, pergunta, tituloRoteiro com que se relaciona e agraupado por toteiro)
	*/
	public function ListPerguntas($discriminadorAmbiente){
		session_start();
		include('../../banco.inc');
		
		//pega o id do professor na sessão
		$idProfessor = $_SESSION['id'];
		
		$sql = "SELECT p.id as idPergunta, p.pergunta as pergunta, p.certa as certa, p.roteiro as idRoteiro, r.titulo  as titulo FROM perguntas p join roteiro r on p.roteiro = r.id WHERE r.professor = $idProfessor and discriminador_contexto = '$discriminadorAmbiente' ORDER BY p.roteiro";
		
		$perguntas = mysql_query($sql);
			
		//inclui linhas no array que será retornado
		while ($linha = mysql_fetch_object($perguntas)){
            $ArrayPergByRoteiro[]=$linha;
        }
		mysql_free_result($perguntas);
		
		mysql_close($conect);
		return $ArrayPergByRoteiro;
				
	}	
	
	/** (versao 2 do Funções Quadráticas)
	* Excluir um pergunta e suas opções através do Id da pergunta que se deseja excluir
	*
	* @access remote
	* @param int idPergunta
	* @return boolean
	*/
	public function excluirPergunta($idPergunta){
		
		include("../../banco.inc");
				
		//Qdo a pergunta é excluída no banco as respostas ligadas a ela tb são... a exclusão é em cascata
		$result = mysql_query("DELETE FROM perguntas WHERE id = $idPergunta");
		
		$retorno = true;
		if (!$result)
			$retorno = false;
		
		mysql_close($conect);
		
		return $retorno;		
	}
		
}
	
?>
